"""
排序不支持原生比较的对象

问题：
   你想排序类型相同的对象，但是他们不支持原生的比较操作。
解决方案：
    内置的 sorted() 函数有一个关键字参数 key ，可以传入一个 callable 对象给它，
    这个 callable 对象对每个传入的对象返回一个值，这个值会被 sorted 用来排序这些对象。
"""

from operator import attrgetter


class User:
    def __init__(self, uid):
        self.uid = uid

    def __repr__(self):
        return 'User({})'.format(self.uid)

    def __str__(self):
        return str(self.uid)


def use_sort_not_compare():
    users = [User(1), User(3), User(2)]
    print(users)
    print(sorted(users, key=lambda user: user.uid))
    # 输出结果：
    """
    [User(1), User(3), User(2)]
    [User(1), User(2), User(3)]
    """


def use_sort_attrgetter():
    users = [User(1), User(3), User(2)]
    print(users)
    print(sorted(users, key=attrgetter("uid")))
    # 输出结果：
    """
    [User(1), User(3), User(2)]
    [User(1), User(2), User(3)]
    """


if __name__ == '__main__':
    use_sort_not_compare()
    use_sort_attrgetter()
